package com.wy.OneClient.thread;

import com.wy.OneClient.Info;
import com.wy.OneClient.client;
import com.wy.OneClient.pojo.Data;
import com.wy.OneClient.pojo.DataType;
import com.wy.OneClient.pojo.Message;
import com.wy.OneClient.util.Utils;

import java.io.IOException;
import java.net.DatagramSocket;

//保证连接线程   思路就是咱们每5秒保证一次通信，没有通信就算断了。    不能说1秒没有消息发送就算断了，也不能说5秒就算断了。
// 那怎么判断，如果没有发送消息后5秒，我给你发送个消息，你没有回复，那就说明断了。   那就需要给接受消息的和发送消息的线程记时间，有些复杂。
//索性就写的烂一点。咱们建立自己的连接。咱们保证通信。  问题是什么时候开启这个线程，两个谁来开启。
public class ConnectSend extends Thread {
    private DatagramSocket datagramSocket;
    private Message message;

    public ConnectSend(DatagramSocket datagramSocket, Message message) {
        this.datagramSocket = datagramSocket;
        this.message = message;
    }

    @Override
    public void run() {
        try {
            Thread.sleep(1000);
            Thread.currentThread().setName("connectThread");
            while (client.virtualConnectFlag) {
//                发送一个连接的消息
                message.setData(new Data<String>(Info.CONNECTING, DataType.COMMAND));
                Utils.sendMessageServiceImpl(datagramSocket, message);
                client.virtualConnectFlag = false;
//                发送完信息设置标示我已经挂了，开休眠庙五秒。
                Thread.sleep(Info.Interval_Time);
//                如果休眠结束之后发现还是挂的，说明对面是真的挂了。
                if (!client.virtualConnectFlag) {
                    Utils.commandPrintRed(message.getAddressInfo().getTargetAddressIp() + "/" + message.getAddressInfo().getTargetPort() + " 断开连接");
                    client.connectFlag = false;
                    break;
                }
            }
        } catch (InterruptedException ignored) {

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
